/* 
 * Area.java
 * 
 * Data de criação: 05/09/2010
 * 
 * O2SOLUTIONS - SOLUÇÕES EM TECNOLOGIA DA INFORMAÇÃO. 
 *
 */
package br.com.o2solutions.siso.integration.entidade;

import javax.persistence.Column;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;

import br.com.o2solutions.core.integration.repository.entity.BaseEntity;

/**
 * Classe responsável por representar uma Área (Local físico no globo terreste).
 * 
 * @author Osvaldeir
 * @since 05/09/2010
 * 
 */
@Entity
@Table(name = "TBAREA", uniqueConstraints = {
		@UniqueConstraint(columnNames = { "LONGITUDEID", "LATITUDEID",
				"ALTITUDEID" }), @UniqueConstraint(columnNames = "DESCRICAO") })
@Inheritance(strategy = InheritanceType.JOINED)
@SequenceGenerator(name = "SQAREA", sequenceName = "SQAREA")
public abstract class Area extends BaseEntity<Integer> {

	private static final long serialVersionUID = 1L;

	private String descricao;

	private Integer cep;

	private PosicaoGPS posicaoGPS;

	/**
	 * Retorna o(a) cep.
	 * 
	 * @return Integer
	 */
	@Column(name = "CEP", nullable = true)
	public Integer getCep() {
		return cep;
	}

	/**
	 * Atribui o(a) cep.
	 * 
	 * @param cep
	 *            Integer
	 */
	public void setCep(Integer cep) {
		this.cep = cep;
	}

	@Id
	@Override
	@Column(name="AREAID")
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SQAREA")
	public Integer getId() {
		return super.getId();
	}

	/**
	 * Retorna o(a) descricao.
	 * 
	 * @return String
	 */
	@Column(name = "DESCRICAO", nullable = false, length = 50)
	public String getDescricao() {
		return descricao;
	}

	/**
	 * Atribui o(a) descricao.
	 * 
	 * @param descricao
	 *            String
	 */
	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	/**
	 * Retorna o(a) posicaoGPS.
	 * 
	 * @return PosicaoGPS
	 */
	@Embedded
	public PosicaoGPS getPosicaoGPS() {
		return posicaoGPS;
	}

	/**
	 * Atribui o(a) posicaoGPS.
	 * 
	 * @param posicaoGPS
	 *            PosicaoGPS
	 */
	public void setPosicaoGPS(PosicaoGPS posicaoGPS) {
		this.posicaoGPS = posicaoGPS;
	}

}
